package com.itheima.controller;


import com.itheima.anno.MyLog;
import com.itheima.pojo.Dept;
import com.itheima.pojo.Result;
import com.itheima.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.util.List;

@Slf4j
@RequestMapping("/depts")
@RestController
public class DeptController {
    //创建日志对象logger
    // private static final Logger log = LoggerFactory.getLogger(DeptController.class);

    //使用log.info/debug/error等方法打印日志

    @Autowired
    private DeptService deptService;

/*    @GetMapping//标识该方法处理地址为depts的GET请求
    public Result queryAllDept(){
        //1.接收请求参数:无

        //2.调用业务逻辑层方法，获取数据
        log.info("查询所有部门，请求参数：无");
        List<Dept> deptList = deptService.selectAllDept();
        log.info("查询所有部门，响应结果：{}",deptList);

        //3.封装响应结果
        return Result.success(deptList);
    }

    @DeleteMapping
    public Result deleteById(Integer id){
        //1.接收请求参数
        //2.调用业务逻辑层方法，获取数据
        log.info("删除部门，请求参数：{}",id);
        deptService.deleteById(id);
        log.info("删除部门，响应结果：{}",id);
        //3.封装响应结果
        return Result.success();
    }

    @PostMapping
    public Result insertDept(@RequestBody Dept dept){
        //1.接收请求参数
        //2.调用业务逻辑层方法，获取数据
        log.info("新增部门，请求参数：{}",dept);
        deptService.insertDept(dept);
        log.info("新增部门，响应结果：{}",dept);
        //3.封装响应结果
        return Result.success();
    }

    //修改数据前先进行查询回显
    @GetMapping("/{id}")
    public Result selectById(@PathVariable Integer id){
        //1.接收请求参数
        //2.调用业务逻辑层方法，获取数据
        log.info("查询回显，请求参数：{}",id);
        Dept deptList = deptService.selectById(id);
        log.info("查询回显，响应结果：{}",deptList);
        //3.封装响应结果

        return Result.success(deptList);
    }
    //在查询回显之后就可以进行修改数据了
    @PutMapping
    public Result updateById(@RequestBody Dept dept){
        //1.接收请求参数
        //2.调用业务逻辑层方法，获取数据
        log.info("修改部门，请求参数：{}",dept);
        deptService.updateById(dept);
        log.info("修改部门，响应结果：{}",dept);
        //3.封装响应结果
        return Result.success();
    }*/

    @GetMapping//标识该方法处理地址为depts的GET请求
    public Result queryAllDept(){
        //1.接收请求参数:无
        //2.调用业务逻辑层方法，获取数据
        log.info("查询所有部门，请求参数：无");
        List<Dept> deptList = deptService.list();
        //3.封装响应结果
        return Result.success(deptList);
    }

    @DeleteMapping
    public Result deleteById(Integer id){
        //1.接收请求参数
        //2.调用业务逻辑层方法，获取数据
        log.info("删除部门，请求参数：{}",id);
        deptService.delete(id);
        //3.封装响应结果
        return Result.success();
    }

    @PostMapping
    public Result insertDept(@RequestBody Dept dept){
        //1.接收请求参数,并且设置基本信息
        dept.setCreateTime(LocalDateTime.now());
        dept.setUpdateTime(LocalDateTime.now());
        //2.调用业务逻辑层方法，获取数据
        log.info("新增部门，请求参数：{}",dept);
        deptService.save(dept);
        //3.封装响应结果
        return Result.success();
    }

    //修改数据前先进行查询回显
    @GetMapping("/{id}")
    public Result selectById(@PathVariable Integer id){
        //1.接收请求参数
        //2.调用业务逻辑层方法，获取数据
        log.info("查询回显，请求参数：{}",id);
        Dept dept = deptService.getById(id);
        //3.封装响应结果

        return Result.success(dept);
    }
    //在查询回显之后就可以进行修改数据了
    @PutMapping
    public Result updateById(@RequestBody Dept dept){
        //1.接收请求参数
        //2.调用业务逻辑层方法，获取数据
        log.info("修改部门，请求参数：{}",dept);
        deptService.updateById(dept);
        //3.封装响应结果
        return Result.success();
    }

}
